{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import random"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "prime = 0x0800000000000011000000000000000000000000000000000000000000000001"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def div_mod(a, b, m):\n",
    "    return (a * pow(b, m - 2, m)) % m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rand():\n",
    "    return random.randrange(0, prime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def limbs(n):\n",
    "    limbs = []\n",
    "    for i in range(8):\n",
    "        limbs += [n % 2**32]\n",
    "        n >>= 32\n",
    "    return limbs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def constant(n):\n",
    "    limbs = []\n",
    "    for i in range(8):\n",
    "        limbs += [n % 2**32]\n",
    "        n >>= 32\n",
    "    return ', '.join(['0x{:08x}'.format(i) for i in limbs])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def U256(n):\n",
    "    return 'u256h!(\"{:064x}\")'.format(n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "def gcdex(a, b):\n",
    "    p = b\n",
    "    x, y, r, s = 1, 0, 0, 1\n",
    "    while b:\n",
    "        (c, q) = (a % b, a // b)\n",
    "        (a, b, r, s, x, y) = (b, c, x-q*r, y-q*s, r, s)\n",
    "    return (x, y, a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "def modinv(n, m):\n",
    "    a, b, c = gcdex(n, m)\n",
    "    assert c == 1\n",
    "    return a % m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'u256h!(\"0x0000000000000000000000000000000000000000000000000000000000000003\")'"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "U256(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'u256h!(\"0x02aaaaaaaaaaaab0555555555555555555555555555555555555555555555556\")'"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "U256(modinv(3, prime))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0x0'"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hex(0x0800000000000011 - (1 | 1 << 4 | 1 << 59 ))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "u256h!(\"012e440f0965e7029c218b64f1010006b5c4ba8b1497c4174a32fec025c197bc\")\n"
     ]
    }
   ],
   "source": [
    "lo = 0x0548c135e26faa9c977fb2eda057b54b2e0baa9a77a0be7c80278f4f03462d4c\n",
    "hi = 0x024385f6bebc1c496e09955db534ef4b1eaff9a78e27d4093cfa8f7c8f886f6b\n",
    "N = hi * 2**256 + lo\n",
    "R = (N * modinv(2**256, prime)) % prime\n",
    "print(U2562(R))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "metadata": {},
   "outputs": [],
   "source": [
    "def U2562(n):\n",
    "    return 'u256h!(\"{:064x}\")'.format(n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [],
   "source": [
    "prime = 3618502788666131213697322783095070105623107215331596699973092056135872020481"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'u256!(\"0800000000000011000000000000000000000000000000000000000000000001\")'"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "U2562(prime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000010, 0x08000000\n",
      "ZKP_U256::new(0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x0800000000000010)\n",
      "u256!(\"0800000000000010ffffffffffffffffffffffffffffffffffffffffffffffff\")\n"
     ]
    }
   ],
   "source": [
    "print(constant(prime - 2))\n",
    "print(U256(prime - 2))\n",
    "print(U2562(prime - 2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000010, 0x08000000'"
      ]
     },
     "execution_count": 244,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "constant(2**251 + 2**196 + 2**192 - 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000011, 0x08000000'"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "constant(prime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000010, 0x08000000\n"
     ]
    }
   ],
   "source": [
    "constant(prime-2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "R = 2**264 % prime\n",
    "R2 = (R * R) % prime\n",
    "R3 = (R2 * R) % prime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "# -(m^{-1} mod m) mod m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ZKP_U256::new(0x1717f47973471ed5, 0xe106229070982941, 0xd82120c54277c73e, 0x07717a21e77894e8)\n",
      "ZKP_U256::new(0xbda5eaad406f66d1, 0xfac4d8e66130d944, 0x97c88939cbce8317, 0x001752ce51d19c97)\n"
     ]
    }
   ],
   "source": [
    "x = rand()\n",
    "r = modinv(x, prime)\n",
    "print(U256(x))\n",
    "print(U256(r))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ZKP_U256::new(0xb7eb3137d7271553, 0xf44101622499c849, 0x6364b9150f381299, 0x0487868a9c0b15bb)\n",
      "ZKP_U256::new(0xee5c3e0c95ea3606, 0xb5d23720247b076a, 0x125d5c1cc549a496, 0x02fa68e3d326247a)\n",
      "ZKP_U256::new(0x04893c41700b0160, 0x9ba854d08388861e, 0x834be37ce5dd881f, 0x0000000425a6a188)\n"
     ]
    }
   ],
   "source": [
    "a = rand()\n",
    "b = rand()\n",
    "m = rand() >> 23\n",
    "print(U256(a))\n",
    "print(U256(b))\n",
    "print(U256(m))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ZKP_U256::new(0x14527949a28bfa32, 0xa388ec81a8763eae, 0x35b22ffb468ed013, 0x000000032b77bd60)\n"
     ]
    }
   ],
   "source": [
    "e = (a * b) % m\n",
    "print(U256(e))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "38045232423341906420353203248419041667346280474709216041129376353522739398327725673055046507091533160775680"
      ]
     },
     "execution_count": 185,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r = 0x000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000\n",
    "r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2759730481755135523911546355995989817812867687640587868774619486103768315761578806468585585456976946685925582645810967454607339323932083627312504373746"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a * b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "85457526618988939021622893830440772086794810363406184870420562049586\n",
      "111804889473398346187087767443853760828280625166196583539941187453280\n"
     ]
    }
   ],
   "source": [
    "print(r % m)\n",
    "print(e)\n",
    "print(m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0x42180fae6fac8979968f7aa977c0cac7bb304fd97e684b3052e9af65ea0000000000000000000000000000000'"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [],
   "source": [
    "B = 2**256\n",
    "def bogo_reduce(lo, hi, m):\n",
    "    print(hi)\n",
    "    if hi == 0:\n",
    "        return lo % m\n",
    "    a = B % m\n",
    "    \n",
    "    rlo = (a * hi) % B\n",
    "    rhi = (a * hi) // B\n",
    "    \n",
    "    lo = (lo + rlo) % m\n",
    "    return bogo_reduce(lo, rhi, m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = rand()\n",
    "b = rand()\n",
    "m = prime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2200845214935117095986479101056979158671457173965271222385219749585457525802\n",
      "68776412966722346374230817978583753066290855462646055708079036215932429293\n",
      "2149262905210071359340130126537324625632074066242357666165159512738606524\n",
      "67164465787814668577673349726428226142860918559759936916309006342829408\n",
      "2098889555869206474248988531206912222792983607983811243843662697253470\n",
      "65590298620912642357677652608271767100142563677658825397811366594956\n",
      "2049696831903518199846075425511948281444471672356105365265715246965\n",
      "64053025996984885187960131469284903008322585168544312942156465826\n",
      "2001657062405775832210325184105467349946297141086623410070392136\n",
      "62551783200180437571778008118670449575211435303585344547593443\n",
      "1954743225005636887093229819815541336319811670773401966476433\n",
      "61085725781426096877137402685133275631727929779936284252585\n",
      "1908928930669563782269105421908810547765433201462104472680\n",
      "59654029083423813660239594059650051220988195962450536877\n",
      "1864188408856992472642801365146863415439516613450612361\n",
      "58255887776780961512597356747850648278221479007831242\n",
      "1820496493024403382972099088590953211959563737111528\n",
      "56890515407012553708610336837909223872986890493197\n",
      "1777828606469140678104455536168709584592257317984\n",
      "55557143952160595400463688942320055054328513465\n",
      "1736160748505017019067598199356699001435161782\n",
      "54255023390781732245959566227104603020798859\n",
      "1695469480961927582689271522636178326307589\n",
      "52983421280060188521634581271148587947246\n",
      "1655731915001879377632169608123777644934\n",
      "51741622343808683248851829735173303485\n",
      "1616925698244019873334323725516306223\n",
      "50528928070125574848188367869056189\n",
      "1579029002191422770458722478617813\n",
      "49344656318481916465986201916529\n",
      "1542020509952558479848041449259\n",
      "48188140936017408441687940269\n",
      "1505879404250542637128893289\n",
      "47058731382829414389219951\n",
      "1470585355713417855255062\n",
      "45955792366044265963968\n",
      "1436118511438881998475\n",
      "44878703482465021424\n",
      "1402459483827030637\n",
      "43826858869594667\n",
      "1369589339674832\n",
      "42799666864838\n",
      "1337489589526\n",
      "41796549672\n",
      "1306142177\n",
      "40816943\n",
      "1275529\n",
      "39860\n",
      "1245\n",
      "38\n",
      "1\n",
      "0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2066012897676544598273797437720438091925618966428237833218050706705165519947"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "bogo_reduce(a, b, m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2066012897676544598273797437720438091925618966428237833218050706705165519947"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(a + b * B) % m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = rand()\n",
    "Y = rand()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 127,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0x7d14253b, 0xef060e37, 0x98d1486f, 0x8700b80a, 0x0a83500d, 0x961ed57d, 0x68cc0469, 0x02945916\n",
      "0xf3a5912a, 0x62f3d853, 0x748c8465, 0x5f9b78d9, 0x8d66de24, 0xcf8479c5, 0x08cc1bb0, 0x06566f2f\n",
      "0x4fb2a90b, 0x301e1830, 0x97593d1a, 0x97e53783, 0xbf27c713, 0x1bed3220, 0x9a076875, 0x02a40705\n"
     ]
    }
   ],
   "source": [
    "Z = (X * pow(Y, prime - 2, prime)) % prime\n",
    "constant(X)\n",
    "constant(Y)\n",
    "constant(Z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 113,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3224672152922917067672837989388327988581742594340864239845412773431323678197"
      ]
     },
     "execution_count": 113,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "950196745041061463774643320527703491895799634523436159469533323013852201437"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "556366109297847317750158526820961374854435013532703699341854040309303859153"
      ]
     },
     "execution_count": 114,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Z"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3224672152922917067672837989388327988581742594340864239845412773431323678197"
      ]
     },
     "execution_count": 115,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "3224672152922917067672837989388327988581742594340864239845412773431323678197"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4174868897963978531447481309916031480477542228864300399314946096445175879634"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "4174868897963978531447481309916031480477542228864300399314946096445175879634"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Z < prime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 119,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3618502788666131213697322783095070105623107215331596699973092056135872020481"
      ]
     },
     "execution_count": 119,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [],
   "source": [
    " def ec_add(point1, point2, p):\n",
    "    \"\"\"\n",
    "    Gets two points on an elliptic curve mod p and returns their sum.\n",
    "    Assumes the points are given in affine form (x, y) and have different x coordinates.\n",
    "    \"\"\"\n",
    "    assert (point1[0] - point2[0]) % p != 0\n",
    "    m = div_mod(point1[1] - point2[1], point1[0] - point2[0], p)\n",
    "    x = (m * m - point1[0] - point2[0]) % p\n",
    "    y = (m * (point1[0] - x) - point1[1]) % p\n",
    "    return x, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [],
   "source": [
    "ax = rand()\n",
    "ay = rand()\n",
    "bx = rand()\n",
    "by = rand()\n",
    "cx, cy = ec_add((ax, ay), (bx, by), prime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0xca9b3b7a, 0xadf5b0d8, 0x4728f1b4, 0x7a5cbd79, 0x316a86d0, 0xb9aaaf56, 0x557c9ca9, 0x0259dee2\n",
      "0x68173fdd, 0x25daa0d2, 0xcd94b717, 0x4f84a316, 0xd637a579, 0x236d898d, 0x787b7c9e, 0x011cf020\n",
      "0x55893510, 0x5985d659, 0xc0cda9ae, 0xfb1db2ec, 0xc78fe4ec, 0xe60f0d63, 0xfb0e0cf5, 0x0449895d\n",
      "0x1b78e1cc, 0x86e1e27b, 0x80a13dd1, 0x157492ef, 0x8191f8ae, 0x7fb47371, 0x8d4ef0e6, 0x07cfb4b0\n",
      "0xcaaa938d, 0x1e36e642, 0x875a7e8a, 0xb1ccde68, 0x1e961e1a, 0xbbb669e2, 0xd487aea7, 0x07ec1cca\n",
      "0x1879893b, 0x953ad520, 0x89ca316f, 0x999e7f28, 0x1a29f3b5, 0xb48241d7, 0x7d682604, 0x05e52087\n"
     ]
    }
   ],
   "source": [
    "constant(ax)\n",
    "constant(ay)\n",
    "constant(bx)\n",
    "constant(by)\n",
    "constant(cx)\n",
    "constant(cy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [],
   "source": [
    "def ec_double(point, alpha, p):\n",
    "    \"\"\"\n",
    "    Doubles a point on an elliptic curve with the equation y^2 = x^3 + alpha*x + beta mod p.\n",
    "    Assumes the point is given in affine form (x, y) and has y != 0.\n",
    "    \"\"\"\n",
    "    assert point[1] % p != 0\n",
    "    m = div_mod(3 * point[0] * point[0] + alpha, 2 * point[1], p)\n",
    "    x = (m * m - 2 * point[0]) % p\n",
    "    y = (m * (point[0] - x) - point[1]) % p\n",
    "    return x, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {},
   "outputs": [],
   "source": [
    "ax = rand()\n",
    "ay = rand()\n",
    "bx, by = ec_double((ax, ay), 1, prime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0xa19caf1f, 0x9764694b, 0xd49d26e1, 0xc2d21cea, 0x9d37cc5b, 0xce13e7e3, 0x787be6e0, 0x00ea1dff\n",
      "0xce7296f0, 0xd1f6f7df, 0xc9c5b41c, 0x6b889413, 0xc9449f06, 0xf44da1a6, 0x302e9f91, 0x011b6c17\n",
      "0x1f01ad3f, 0x6fe79335, 0x2cdfe101, 0x032a86e6, 0x1481bc24, 0x8fccd336, 0xf387342d, 0x017056be\n",
      "0x6342205c, 0x06a09929, 0x1924cee3, 0x38e46f15, 0xe0393658, 0xcc1b8a43, 0x0743351a, 0x062673bb\n"
     ]
    }
   ],
   "source": [
    "constant(ax)\n",
    "constant(ay)\n",
    "constant(bx)\n",
    "constant(by)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {},
   "outputs": [],
   "source": [
    " def ec_mult(m, point, alpha, p):\n",
    "    \"\"\"\n",
    "    Multiplies by m a point on the elliptic curve with equation y^2 = x^3 + alpha*x + beta mod p.\n",
    "    Assumes the point is given in affine form (x, y) and that 0 < m < order(point).\n",
    "    \"\"\"\n",
    "    if m == 1:\n",
    "        return point\n",
    "    if m % 2 == 0:\n",
    "        return ec_mult(m // 2, ec_double(point, alpha, p), alpha, p)\n",
    "    return ec_add(ec_mult(m - 1, point, alpha, p), point, p)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [],
   "source": [
    "ax = rand()\n",
    "ay = rand()\n",
    "b = rand()\n",
    "cx, cy = ec_mult(b, (ax, ay), 1, prime)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 150,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0x5bf31eb0, 0xfe50a889, 0x2d1a8a21, 0x3242e28e, 0x0d13fe66, 0xcf63e064, 0x9426e2c3, 0x0040ffd5\n",
      "0xe29859d2, 0xd21b931a, 0xea34d27d, 0x296f19b9, 0x6487ae5b, 0x524260f9, 0x069092ca, 0x060c2257\n",
      "0x711a14cf, 0xebe54f04, 0x4729d630, 0xd14a329a, 0xf5480b47, 0x35fdc862, 0xde09131d, 0x029f7a37\n",
      "0x143de731, 0x4c657d7e, 0x44b99cbf, 0x49dfc2e5, 0x40ea4226, 0xaf6c4895, 0x9a141832, 0x04851acc\n",
      "0x138592fd, 0x1377613f, 0xd53c61dd, 0xaa8b32c1, 0xd5bf18bc, 0x3b22a665, 0xf54ed6ae, 0x07f4bb53\n"
     ]
    }
   ],
   "source": [
    "constant(ax)\n",
    "constant(ay)\n",
    "constant(b)\n",
    "constant(cx)\n",
    "constant(cy)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0xadc64d2f, 0x1e66a241, 0xcae7b232, 0xb781126d, 0xffffffff, 0xffffffff, 0x00000010, 0x08000000\n"
     ]
    }
   ],
   "source": [
    "constant(0x800000000000010ffffffffffffffffb781126dcae7b2321e66a241adc64d2f)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 162,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = rand()\n",
    "b = rand()\n",
    "p = (rand(), rand())\n",
    "lhs = ec_add(ec_mult(a, p, 1, prime), ec_mult(b, p, 1, prime), prime)\n",
    "rhs = ec_mult(a + b, p, 1, prime)\n",
    "lhs == rhs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "metadata": {},
   "outputs": [],
   "source": [
    "D = [\n",
    "[285, 0x84b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[284, 0x425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[283, 0x212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[282, 0x10969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[281, 0x084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[280, 0x0425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[279, 0x0212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[278, 0x010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[277, 0x0084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[276, 0x00425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[275, 0x00212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[274, 0x0010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000000000000000000000000000, 0x000d7d418f2575f2fd73563a65410a6ca4bcd239abf3fab0d1e31ce288448e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[273, 0x00084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000000000000000000000000, 0x000531f44c146f5b36798a7f5501d31bfb1bcb289fb7f19e59603ccc85848e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[272, 0x000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000000000000000000000000, 0x00010c4daa8bec0f52fca4a1cce23773a64b47a01999ed151d1eccc184248e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[271, 0x000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000000000000000000000000, 0x00010c4daa8bec0f52fca4a1cce23773a64b47a01999ed151d1eccc184248e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[270, 0x00010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000000000000000000000000, 0x000002e40229cb3c5a1d6b2a6ada5089911726bdf8126bf2ce0e70bec3cc8e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[269, 0x000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000000000000000000000000, 0x000002e40229cb3c5a1d6b2a6ada5089911726bdf8126bf2ce0e70bec3cc8e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[268, 0x0000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000000000000000000000000, 0x000002e40229cb3c5a1d6b2a6ada5089911726bdf8126bf2ce0e70bec3cc8e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[267, 0x0000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000000000000000000000000, 0x000002e40229cb3c5a1d6b2a6ada5089911726bdf8126bf2ce0e70bec3cc8e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[266, 0x000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000000000000000000000000, 0x000002e40229cb3c5a1d6b2a6ada5089911726bdf8126bf2ce0e70bec3cc8e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[265, 0x0000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000000000000000000000000, 0x000002e40229cb3c5a1d6b2a6ada5089911726bdf8126bf2ce0e70bec3cc8e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[264, 0x00000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000000000000000000000000, 0x000002e40229cb3c5a1d6b2a6ada5089911726bdf8126bf2ce0e70bec3cc8e3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[263, 0x00000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000000000000000000000000, 0x000000d12ed906fab42bacb77c1640bbbcecbe7c33cf5cf089705006be4bde3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[262, 0x0000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000000000000000000000000, 0x000000d12ed906fab42bacb77c1640bbbcecbe7c33cf5cf089705006be4bde3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[261, 0x00000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000000000000000000000, 0x0000004c7a04d5ea4aaf3d1ac0653cc847e2246bc2be992ff848c7d8bcebb23f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[260, 0x000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000000000000000000000, 0x0000000a1f9abd6215f1054c628cbace8d5cd7638a36374fafb503c1bc3b9c3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[259, 0x000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000000000000000000000, 0x0000000a1f9abd6215f1054c628cbace8d5cd7638a36374fafb503c1bc3b9c3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[258, 0x00000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000000000000000000000, 0x0000000a1f9abd6215f1054c628cbace8d5cd7638a36374fafb503c1bc3b9c3f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[257, 0x000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000000000000000000000, 0x00000001d44d7a510f593e5296d1aa8f560c2dc283252b13a6a28b3edc25997f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[256, 0x0000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000000000000000000000, 0x00000001d44d7a510f593e5296d1aa8f560c2dc283252b13a6a28b3edc25997f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[255, 0x0000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000000000000000000000, 0x00000001d44d7a510f593e5296d1aa8f560c2dc283252b13a6a28b3edc25997f4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[254, 0x000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000000000000000000000, 0x00000000cae3d1eeee8645735d5a48876f22188e6243098c25803c2e8022d9274d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[253, 0x0000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000000000000000000000, 0x00000000462efdbdde1cc903c09e97837bad0df451d1f8c864ef14a6522178fb4d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[252, 0x00000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000000000000000000000, 0x0000000003d493a555e80acbf240bf0181f288a74999706684a680e23b20c8e54d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[251, 0x00000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000000000000000000000, 0x0000000003d493a555e80acbf240bf0181f288a74999706684a680e23b20c8e54d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[250, 0x0000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000000000000000000000, 0x0000000003d493a555e80acbf240bf0181f288a74999706684a680e23b20c8e54d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[249, 0x00000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000000000000000000, 0x0000000003d493a555e80acbf240bf0181f288a74999706684a680e23b20c8e54d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[248, 0x000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000000000000000000, 0x0000000003d493a555e80acbf240bf0181f288a74999706684a680e23b20c8e54d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[247, 0x000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000000000000000000, 0x0000000001c1c05491a664da33cdd03d7224b47ce157ac2375a43c441a68c3649d42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[246, 0x00000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000000000000000000, 0x0000000000b856ac2f8591e1549458db6a3dca67ad36ca01ee2319f50a0cc0a44542ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[245, 0x000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000000000000000000, 0x000000000033a1d7fe752864e4f79d2a664a555d132658f12a6288cd81debf441942ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[244, 0x0000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000000000000000000, 0x000000000033a1d7fe752864e4f79d2a664a555d132658f12a6288cd81debf441942ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[243, 0x0000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000000000000000000, 0x00000000001274a2f2310e05c9106e3e254d781a6ca23cacf97264839fd33eec0e42ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[242, 0x000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000000000000000000, 0x000000000001de086c0f00d63b1cd6c804cf097919602e8ae0fa525eaecd7ec008c2ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[241, 0x0000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000000000000000000, 0x000000000001de086c0f00d63b1cd6c804cf097919602e8ae0fa525eaecd7ec008c2ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[240, 0x00000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000000000000000000, 0x000000000001de086c0f00d63b1cd6c804cf097919602e8ae0fa525eaecd7ec008c2ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[239, 0x00000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000000000000000000, 0x000000000001de086c0f00d63b1cd6c804cf097919602e8ae0fa525eaecd7ec008c2ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[238, 0x0000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000000000000000000, 0x000000000000d49ec3ace003423d9d50a2c7228f042c0da8bf72d13c5fbd22bd486aab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[237, 0x00000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000000000000000, 0x0000000000004fe9ef7bcf99c5ce0094f1c32f19f991fd37aeaf10ab3834f4bbe83eab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[236, 0x000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000000000000000, 0x0000000000000d8f85634765079632371941355f7444f4ff264d3062a470ddbb3828ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[235, 0x000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000000000000000, 0x0000000000000d8f85634765079632371941355f7444f4ff264d3062a470ddbb3828ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[234, 0x00000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000000000000000, 0x0000000000000d8f85634765079632371941355f7444f4ff264d3062a470ddbb3828ab9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[233, 0x000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000000000000000, 0x00000000000005443820365e6fcf386b5e30f628239b53f81540f45991f85adb2225eb9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[232, 0x0000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000000000000000, 0x000000000000011e917eaddb23ebbb8580a8d68c7b4683748cbad65508bc196b17248b9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[231, 0x0000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000000000000000, 0x000000000000011e917eaddb23ebbb8580a8d68c7b4683748cbad65508bc196b17248b9e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[230, 0x000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000000000000000, 0x000000000000001527d64bba50f2dc4c0946cea591314f53aa994ed3e66d090f1464339e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[229, 0x0000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000000000000000, 0x000000000000001527d64bba50f2dc4c0946cea591314f53aa994ed3e66d090f1464339e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[228, 0x00000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000000000000000, 0x000000000000001527d64bba50f2dc4c0946cea591314f53aa994ed3e66d090f1464339e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[227, 0x00000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000000000000000, 0x000000000000001527d64bba50f2dc4c0946cea591314f53aa994ed3e66d090f1464339e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[226, 0x0000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000000000000000, 0x0000000000000004913bc59843c34e5871d0ae27228ffc119c77365bd448180954382e1e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[225, 0x00000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000000000000, 0x0000000000000004913bc59843c34e5871d0ae27228ffc119c77365bd448180954382e1e5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[224, 0x000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000000000000, 0x00000000000000006b95240fc0776adb8bf3260786e7a74118eeb03dcfbedbc7e42d2cbe5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[223, 0x000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000000000000, 0x00000000000000006b95240fc0776adb8bf3260786e7a74118eeb03dcfbedbc7e42d2cbe5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[222, 0x00000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000000000000, 0x00000000000000006b95240fc0776adb8bf3260786e7a74118eeb03dcfbedbc7e42d2cbe5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[221, 0x000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000000000000, 0x00000000000000006b95240fc0776adb8bf3260786e7a74118eeb03dcfbedbc7e42d2cbe5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[220, 0x0000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000000000000, 0x0000000000000000293ab9f73842aca3bd954d858d2d21f410b627dbef764803cd2c7ca85ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[219, 0x0000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000000000000, 0x0000000000000000080d84eaf4284d87d6666144904fdf4d8c99e3aaff51fe21c1ac249d5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[218, 0x000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000000000000, 0x0000000000000000080d84eaf4284d87d6666144904fdf4d8c99e3aaff51fe21c1ac249d5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[217, 0x0000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000000000000, 0x0000000000000000080d84eaf4284d87d6666144904fdf4d8c99e3aaff51fe21c1ac249d5ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[216, 0x00000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000000000000, 0x000000000000000003e7de496ba501a4598083bc70b436f8bc165b24e14d74e5803c199bfed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[215, 0x00000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000000000000, 0x000000000000000001d50af8a7635bb29b0d94f860e662ce53d496e1d24b30475f84141b4ed584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[214, 0x0000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000000000000, 0x000000000000000000cba150454288b9bbd41d9658ff78b91fb3b4c04aca0df84f28115af6d584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[213, 0x00000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000000000, 0x00000000000000000046ec7c14321f3d4c3761e5550c03ae85a343af87097cd0c6fa0ffacad584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[212, 0x000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000000000, 0x000000000000000000049211fba9ea7f1469040cd3124929389b0b272529343d02e30f4ab4d584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[211, 0x000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000000000, 0x000000000000000000049211fba9ea7f1469040cd3124929389b0b272529343d02e30f4ab4d584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[210, 0x00000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000000000, 0x000000000000000000049211fba9ea7f1469040cd3124929389b0b272529343d02e30f4ab4d584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[209, 0x000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000000000, 0x000000000000000000049211fba9ea7f1469040cd3124929389b0b272529343d02e30f4ab4d584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[208, 0x0000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000000000, 0x000000000000000000006c6b5a21673330ec1e2f4af2ad80e3ca879e9f0b2fb3c6a19f3fb37584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[207, 0x0000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000000000, 0x000000000000000000006c6b5a21673330ec1e2f4af2ad80e3ca879e9f0b2fb3c6a19f3fb37584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[206, 0x000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000000000, 0x000000000000000000006c6b5a21673330ec1e2f4af2ad80e3ca879e9f0b2fb3c6a19f3fb37584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[205, 0x0000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000000000, 0x000000000000000000006c6b5a21673330ec1e2f4af2ad80e3ca879e9f0b2fb3c6a19f3fb37584a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[204, 0x00000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000000000, 0x000000000000000000002a10f008defe72b44fd17270b3c65e7d7f6616a94f6b32dd883f035f84a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[203, 0x00000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000000000, 0x0000000000000000000008e3bafc9ae4139868a2862fb6e91bd6fb49d2785f46e8fb7cbeab5484a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[202, 0x0000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000000000, 0x0000000000000000000008e3bafc9ae4139868a2862fb6e91bd6fb49d2785f46e8fb7cbeab5484a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[201, 0x00000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000000, 0x0000000000000000000000986db989dd7bd16ed6cb1f77b1cb2d5a42c16c233dd682f9de9551c4a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[200, 0x000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000000, 0x0000000000000000000000986db989dd7bd16ed6cb1f77b1cb2d5a42c16c233dd682f9de9551c4a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[199, 0x000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000000, 0x0000000000000000000000986db989dd7bd16ed6cb1f77b1cb2d5a42c16c233dd682f9de9551c4a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[198, 0x00000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000000, 0x0000000000000000000000986db989dd7bd16ed6cb1f77b1cb2d5a42c16c233dd682f9de9551c4a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[197, 0x000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000000, 0x000000000000000000000013b8e558cd1254ff3a0f6e73be5622c032505b5f7d455b71b093f198a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[196, 0x0000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000000, 0x000000000000000000000013b8e558cd1254ff3a0f6e73be5622c032505b5f7d455b71b093f198a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[195, 0x0000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000000, 0x000000000000000000000013b8e558cd1254ff3a0f6e73be5622c032505b5f7d455b71b093f198a621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[194, 0x000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000000, 0x000000000000000000000003224ad2ab0525714677f8533fe7816cf042394705333680aad3c5932621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[193, 0x0000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000000, 0x000000000000000000000003224ad2ab0525714677f8533fe7816cf042394705333680aad3c5932621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[192, 0x00000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000000, 0x000000000000000000000003224ad2ab0525714677f8533fe7816cf042394705333680aad3c5932621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[191, 0x00000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000000, 0x0000000000000000000000010f7781e6c37f7f8805098f3019ad4288007503f630f1e28a1bc0127621fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[190, 0x0000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000000, 0x000000000000000000000000060dd984a2ac86a8cb922d2832c32d53df92e26eafcf9379bfbd521e21fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[189, 0x00000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000000, 0x000000000000000000000000060dd984a2ac86a8cb922d2832c32d53df92e26eafcf9379bfbd521e21fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[188, 0x000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000000, 0x000000000000000000000000060dd984a2ac86a8cb922d2832c32d53df92e26eafcf9379bfbd521e21fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[187, 0x000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000000, 0x000000000000000000000000060dd984a2ac86a8cb922d2832c32d53df92e26eafcf9379bfbd521e21fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[186, 0x00000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000000, 0x000000000000000000000000060dd984a2ac86a8cb922d2832c32d53df92e26eafcf9379bfbd521e21fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[185, 0x000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000000, 0x000000000000000000000000060dd984a2ac86a8cb922d2832c32d53df92e26eafcf9379bfbd521e21fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[184, 0x0000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000000, 0x00000000000000000000000001e832e31a293ac54eac4fa0132784ff0f0f59e891cb0a3d7e4d471cc1fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[183, 0x0000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000000, 0x00000000000000000000000001e832e31a293ac54eac4fa0132784ff0f0f59e891cb0a3d7e4d471cc1fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[182, 0x000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000000, 0x00000000000000000000000000dec93ab80867cc6f72d83e0b409ae9daee77c70a49e7ee6df1445c69fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[181, 0x0000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000000, 0x000000000000000000000000005a146686f7fe4fffd61c8d074d25df40de06b6468956c6e5c342fc3dfc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[180, 0x00000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000000, 0x0000000000000000000000000017b9fc6e6fc991c807beb485536b59f3d5ce2de4a90e3321ac424c27fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[179, 0x00000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000000, 0x0000000000000000000000000017b9fc6e6fc991c807beb485536b59f3d5ce2de4a90e3321ac424c27fc66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[178, 0x0000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000000, 0x00000000000000000000000000072361e84dbc623a14273e64d4fcb8a093c00bcc30fc0e30a68220227c66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[177, 0x00000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000000, 0x00000000000000000000000000072361e84dbc623a14273e64d4fcb8a093c00bcc30fc0e30a68220227c66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[176, 0x000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000000, 0x0000000000000000000000000002fdbb46c5391656974160dcb561104bc33c834612f784f4651215211c66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[175, 0x000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000000, 0x0000000000000000000000000000eae7f600f77064d8ce7218a5933c215afabf0303f54056445a0fa06c66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[174, 0x00000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000000, 0x0000000000000000000000000000eae7f600f77064d8ce7218a5933c215afabf0303f54056445a0fa06c66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[173, 0x000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000000, 0x0000000000000000000000000000663321cfe706e86931b667a19fc716c0ea4df24034af2ebc2c0e404066231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[172, 0x0000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000000, 0x000000000000000000000000000023d8b7b75ed22a3163588f1fa60c9173e21569de54669af8150d902a66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[171, 0x0000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000000, 0x000000000000000000000000000002ab82ab1ab7cb157c29a2dea92f4ecd5df925ad64425116098d381f66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[170, 0x000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000000, 0x000000000000000000000000000002ab82ab1ab7cb157c29a2dea92f4ecd5df925ad64425116098d381f66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[169, 0x0000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000000, 0x000000000000000000000000000002ab82ab1ab7cb157c29a2dea92f4ecd5df925ad64425116098d381f66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[168, 0x00000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000000, 0x000000000000000000000000000002ab82ab1ab7cb157c29a2dea92f4ecd5df925ad64425116098d381f66231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[167, 0x00000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000000, 0x00000000000000000000000000000098af5a56762523bdb6b41a99617aa2f5b7616a55400c77e8d5329eb6231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[166, 0x0000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000000, 0x00000000000000000000000000000098af5a56762523bdb6b41a99617aa2f5b7616a55400c77e8d5329eb6231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[165, 0x00000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000000, 0x00000000000000000000000000000013fa862565bba74e19f869956e05985ba6f059917f7b5060a7313e8a231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[164, 0x000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000000, 0x00000000000000000000000000000013fa862565bba74e19f869956e05985ba6f059917f7b5060a7313e8a231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[163, 0x000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000000, 0x00000000000000000000000000000013fa862565bba74e19f869956e05985ba6f059917f7b5060a7313e8a231d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[162, 0x00000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000000, 0x0000000000000000000000000000000363eb9f43ae77c02660f374ef96f70864e2377907692b6fa1711284a31d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[161, 0x000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000000, 0x0000000000000000000000000000000363eb9f43ae77c02660f374ef96f70864e2377907692b6fa1711284a31d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[160, 0x0000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000000, 0x0000000000000000000000000000000363eb9f43ae77c02660f374ef96f70864e2377907692b6fa1711284a31d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[159, 0x0000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000000, 0x0000000000000000000000000000000151184e7f6cd1ce67ee04b0dfc922ddfca07335f866e6d180b90d03f31d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[158, 0x000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000000, 0x0000000000000000000000000000000047aea61d4bfed588b48d4ed7e238c8c87f911470e5c482705d0a439b1d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[157, 0x0000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000000, 0x0000000000000000000000000000000047aea61d4bfed588b48d4ed7e238c8c87f911470e5c482705d0a439b1d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[156, 0x00000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000000, 0x0000000000000000000000000000000005543c04c3ca1750e62f7655e87e437b77588c0f057beeac460993851d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[155, 0x00000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000000, 0x0000000000000000000000000000000005543c04c3ca1750e62f7655e87e437b77588c0f057beeac460993851d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[154, 0x0000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000000, 0x0000000000000000000000000000000005543c04c3ca1750e62f7655e87e437b77588c0f057beeac460993851d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[153, 0x00000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000000, 0x0000000000000000000000000000000005543c04c3ca1750e62f7655e87e437b77588c0f057beeac460993851d5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[152, 0x000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000000, 0x00000000000000000000000000000000012e95633b46cb6d694998cdc8e29b26a6d50388e777657004998883bd5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[151, 0x000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000000, 0x00000000000000000000000000000000012e95633b46cb6d694998cdc8e29b26a6d50388e777657004998883bd5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[150, 0x00000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000000, 0x0000000000000000000000000000000000252bbad925f8748a10216bc0fbb11172b421675ff64320f43d85c3655e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[149, 0x000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000000, 0x0000000000000000000000000000000000252bbad925f8748a10216bc0fbb11172b421675ff64320f43d85c3655e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[148, 0x0000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000000, 0x0000000000000000000000000000000000252bbad925f8748a10216bc0fbb11172b421675ff64320f43d85c3655e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[147, 0x0000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000000, 0x000000000000000000000000000000000003fe85cce1de156e28f27f7ffed3cecc3005232f061ed71232056b5a5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[146, 0x000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000000, 0x000000000000000000000000000000000003fe85cce1de156e28f27f7ffed3cecc3005232f061ed71232056b5a5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[145, 0x0000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000000, 0x000000000000000000000000000000000003fe85cce1de156e28f27f7ffed3cecc3005232f061ed71232056b5a5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[144, 0x00000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000000, 0x000000000000000000000000000000000003fe85cce1de156e28f27f7ffed3cecc3005232f061ed71232056b5a5e4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[143, 0x00000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000000, 0x000000000000000000000000000000000001ebb27c1d9c6f7c6a7f90bbef05faa1c7c35eebf71c9274114d65d9ae4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[142, 0x0000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000000, 0x000000000000000000000000000000000000e248d3bb7b9c838b461959e71f108c93a27cca6f9b702500f16319564bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[141, 0x00000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000000, 0x0000000000000000000000000000000000005d93ff8a6b33071ba95da8e32b9b81f9920bb9abdadefd78c361b92a4bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[140, 0x000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000000, 0x0000000000000000000000000000000000001b399571e2fe48e3daffd06131e0fcac89d33149fa9669b4ac6109144bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[139, 0x000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000000, 0x0000000000000000000000000000000000001b399571e2fe48e3daffd06131e0fcac89d33149fa9669b4ac6109144bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[138, 0x00000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000000, 0x0000000000000000000000000000000000000aa2faebc0f11955e7685a40b3725b5947c50f31828444c3a6a0dd0ecbbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[137, 0x000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000000, 0x0000000000000000000000000000000000000257ada8afea818eed9c9f30743b0aafa6bdfe25467b324b23c0c70c0bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[136, 0x0000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000000, 0x0000000000000000000000000000000000000257ada8afea818eed9c9f30743b0aafa6bdfe25467b324b23c0c70c0bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[135, 0x0000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000000, 0x0000000000000000000000000000000000000044da57eba8db9d2f29b06c646d36853e7c39e23778edad0308c18b5bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[134, 0x000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000000, 0x0000000000000000000000000000000000000044da57eba8db9d2f29b06c646d36853e7c39e23778edad0308c18b5bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[133, 0x0000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000000, 0x0000000000000000000000000000000000000044da57eba8db9d2f29b06c646d36853e7c39e23778edad0308c18b5bbdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[132, 0x00000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000000, 0x00000000000000000000000000000000000000027fedd320a6def75b5293e2737bfff1740159d598a5193ef1c0db45bdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[131, 0x00000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000000, 0x00000000000000000000000000000000000000027fedd320a6def75b5293e2737bfff1740159d598a5193ef1c0db45bdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[130, 0x0000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000000, 0x00000000000000000000000000000000000000027fedd320a6def75b5293e2737bfff1740159d598a5193ef1c0db45bdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[129, 0x00000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000000, 0x00000000000000000000000000000000000000027fedd320a6def75b5293e2737bfff1740159d598a5193ef1c0db45bdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[128, 0x000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000000, 0x00000000000000000000000000000000000000027fedd320a6def75b5293e2737bfff1740159d598a5193ef1c0db45bdd963f69888f6d51cc9fc71b8164801f2],\n",
    "[127, 0x000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000000, 0x00000000000000000000000000000000000000006d1a825c6539059cdfa51e63ae2bc70bbf959289a2d4a0d108d5c50dd963f69888f6d51cc9fc71b8164801f2],\n",
    "[126, 0x00000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000000, 0x00000000000000000000000000000000000000006d1a825c6539059cdfa51e63ae2bc70bbf959289a2d4a0d108d5c50dd963f69888f6d51cc9fc71b8164801f2],\n",
    "[125, 0x000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000000, 0x00000000000000000000000000000000000000006d1a825c6539059cdfa51e63ae2bc70bbf959289a2d4a0d108d5c50dd963f69888f6d51cc9fc71b8164801f2],\n",
    "[124, 0x0000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000000, 0x00000000000000000000000000000000000000002ac01843dd044765114745e1b47141beb75d0a27c28c0d0cf1d514f7d963f69888f6d51cc9fc71b8164801f2],\n",
    "[123, 0x0000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000000, 0x00000000000000000000000000000000000000000992e33798e9e8492a1859a0b793ff183340c5f6d267c32ae654bcecd963f69888f6d51cc9fc71b8164801f2],\n",
    "[122, 0x000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000000, 0x00000000000000000000000000000000000000000992e33798e9e8492a1859a0b793ff183340c5f6d267c32ae654bcecd963f69888f6d51cc9fc71b8164801f2],\n",
    "[121, 0x0000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000000, 0x0000000000000000000000000000000000000000014795f487e35082304c9e90785cae6e9239b4ea965eb0b26374a6ea1963f69888f6d51cc9fc71b8164801f2],\n",
    "[120, 0x00000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000000, 0x0000000000000000000000000000000000000000014795f487e35082304c9e90785cae6e9239b4ea965eb0b26374a6ea1963f69888f6d51cc9fc71b8164801f2],\n",
    "[119, 0x00000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000000, 0x0000000000000000000000000000000000000000014795f487e35082304c9e90785cae6e9239b4ea965eb0b26374a6ea1963f69888f6d51cc9fc71b8164801f2],\n",
    "[118, 0x0000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000000, 0x0000000000000000000000000000000000000000003e2c4c25c27d895113272e7075c4595e18d2c90edd8e635318a429c163f69888f6d51cc9fc71b8164801f2],\n",
    "[117, 0x00000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000000, 0x0000000000000000000000000000000000000000003e2c4c25c27d895113272e7075c4595e18d2c90edd8e635318a429c163f69888f6d51cc9fc71b8164801f2],\n",
    "[116, 0x000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000000, 0x0000000000000000000000000000000000000000003e2c4c25c27d895113272e7075c4595e18d2c90edd8e635318a429c163f69888f6d51cc9fc71b8164801f2],\n",
    "[115, 0x000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000000, 0x0000000000000000000000000000000000000000001cff17197e632a352bf8422f78e716b794b684dded6a19710d23d1b663f69888f6d51cc9fc71b8164801f2],\n",
    "[114, 0x00000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000000, 0x0000000000000000000000000000000000000000000c687c935c55faa73860cc0efa78756452a862c57557f4800763a5b0e3f69888f6d51cc9fc71b8164801f2],\n",
    "[113, 0x000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000000, 0x000000000000000000000000000000000000000000041d2f504b4f62e03e9510febb4124bab1a151b9394ee20784838fae23f69888f6d51cc9fc71b8164801f2],\n",
    "[112, 0x0000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000000, 0x000000000000000000000000000000000000000000041d2f504b4f62e03e9510febb4124bab1a151b9394ee20784838fae23f69888f6d51cc9fc71b8164801f2],\n",
    "[111, 0x0000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000000, 0x000000000000000000000000000000000000000000020a5bff870dbcee8022223aab735090495f8d762a4c9d6963cb8a2d73f69888f6d51cc9fc71b8164801f2],\n",
    "[110, 0x000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000000, 0x0000000000000000000000000000000000000000000100f25724ece9f5a0e8aad8a38c667b153eab54a2cb7b1a536f876d1bf69888f6d51cc9fc71b8164801f2],\n",
    "[109, 0x0000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000000, 0x000000000000000000000000000000000000000000007c3d82f3dc8079314bef279f98f1707b2e3a43df0ae9f2cb41860ceff69888f6d51cc9fc71b8164801f2],\n",
    "[108, 0x00000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000000, 0x0000000000000000000000000000000000000000000039e318db544bbaf97d914f1d9f36eb2e2601bb7d2aa15f072a855cd9f69888f6d51cc9fc71b8164801f2],\n",
    "[107, 0x00000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000000, 0x0000000000000000000000000000000000000000000018b5e3cf10315bdd966262dca259a887a1e5774c3a7d15251f0504cef69888f6d51cc9fc71b8164801f2],\n",
    "[106, 0x0000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000000, 0x00000000000000000000000000000000000000000000081f4948ee242c4fa2caecbc23eb07345fd75533c26af0341944d8c9769888f6d51cc9fc71b8164801f2],\n",
    "[105, 0x00000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000000, 0x00000000000000000000000000000000000000000000081f4948ee242c4fa2caecbc23eb07345fd75533c26af0341944d8c9769888f6d51cc9fc71b8164801f2],\n",
    "[104, 0x000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000000, 0x0000000000000000000000000000000000000000000003f9a2a765a0e06c25e50f34044f5edf8f53ccada46666f7d7d4cdc8169888f6d51cc9fc71b8164801f2],\n",
    "[103, 0x000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000000, 0x0000000000000000000000000000000000000000000001e6cf56a15f3a7a6772206ff4818ab52712086a95642259b71cc847669888f6d51cc9fc71b8164801f2],\n",
    "[102, 0x00000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000000, 0x0000000000000000000000000000000000000000000000dd65ae3f3e67818838a90dec9aa09ff2f126490de3000aa6c0c5870e9888f6d51cc9fc71b8164801f2],\n",
    "[101, 0x000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000000, 0x000000000000000000000000000000000000000000000058b0da0e2dfe05189bed5ce8a72b9558e0b5384a226ee31e92c426e29888f6d51cc9fc71b8164801f2],\n",
    "[100, 0x0000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000000, 0x000000000000000000000000000000000000000000000016566ff5a5c946e0cd8f8466ad71100bd87cafe842264f5a7bc376cc9888f6d51cc9fc71b8164801f2],\n",
    "[99, 0x0000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000000, 0x000000000000000000000000000000000000000000000016566ff5a5c946e0cd8f8466ad71100bd87cafe842264f5a7bc376cc9888f6d51cc9fc71b8164801f2],\n",
    "[98, 0x000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000000, 0x000000000000000000000000000000000000000000000005bfd56f83bc1752d9f80e462f026eb8966e8dcfca142a6976034ac71888f6d51cc9fc71b8164801f2],\n",
    "[97, 0x0000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000000, 0x000000000000000000000000000000000000000000000005bfd56f83bc1752d9f80e462f026eb8966e8dcfca142a6976034ac71888f6d51cc9fc71b8164801f2],\n",
    "[96, 0x00000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000000, 0x0000000000000000000000000000000000000000000000019a2ecdfb38cb6f5d1230be0f66c663c5eb0549ac0fa12d34933fc5b888f6d51cc9fc71b8164801f2],\n",
    "[95, 0x00000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000000, 0x0000000000000000000000000000000000000000000000019a2ecdfb38cb6f5d1230be0f66c663c5eb0549ac0fa12d34933fc5b888f6d51cc9fc71b8164801f2],\n",
    "[94, 0x0000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000000, 0x00000000000000000000000000000000000000000000000090c5259917f8767dd8b95c077fdc4e91ca2328248e7ede24373d056088f6d51cc9fc71b8164801f2],\n",
    "[93, 0x00000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000000, 0x0000000000000000000000000000000000000000000000000c105168078efa0e3bfdab038c6743f7b9b21760cdedb69c093ba53488f6d51cc9fc71b8164801f2],\n",
    "[92, 0x000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000000, 0x0000000000000000000000000000000000000000000000000c105168078efa0e3bfdab038c6743f7b9b21760cdedb69c093ba53488f6d51cc9fc71b8164801f2],\n",
    "[91, 0x000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000000, 0x0000000000000000000000000000000000000000000000000c105168078efa0e3bfdab038c6743f7b9b21760cdedb69c093ba53488f6d51cc9fc71b8164801f2],\n",
    "[90, 0x00000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000000, 0x0000000000000000000000000000000000000000000000000c105168078efa0e3bfdab038c6743f7b9b21760cdedb69c093ba53488f6d51cc9fc71b8164801f2],\n",
    "[89, 0x000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000000, 0x00000000000000000000000000000000000000000000000003c50424f68862474231eff34d2ff34e18ab065491e4a423865b8f31c8f6d51cc9fc71b8164801f2],\n",
    "[88, 0x0000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000000, 0x00000000000000000000000000000000000000000000000003c50424f68862474231eff34d2ff34e18ab065491e4a423865b8f31c8f6d51cc9fc71b8164801f2],\n",
    "[87, 0x0000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000000, 0x00000000000000000000000000000000000000000000000001b230d43246bc5583bf012f3d621f23b069421182e25f8565a389b118f6d51cc9fc71b8164801f2],\n",
    "[86, 0x000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000000, 0x00000000000000000000000000000000000000000000000000a8c72bd025e95ca48589cd357b350e7c485feffb613d36554786f0c0f6d51cc9fc71b8164801f2],\n",
    "[85, 0x0000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000000, 0x000000000000000000000000000000000000000000000000002412579f157fe034e8ce1c3187c003e237eedf37a0ac0ecd19859094f6d51cc9fc71b8164801f2],\n",
    "[84, 0x00000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000000, 0x000000000000000000000000000000000000000000000000002412579f157fe034e8ce1c3187c003e237eedf37a0ac0ecd19859094f6d51cc9fc71b8164801f2],\n",
    "[83, 0x00000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000000, 0x0000000000000000000000000000000000000000000000000002e52292d1658119019f2ff08ae2c13bb3d29b06b087c4eb0e053889f6d51cc9fc71b8164801f2],\n",
    "[82, 0x0000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000000, 0x0000000000000000000000000000000000000000000000000002e52292d1658119019f2ff08ae2c13bb3d29b06b087c4eb0e053889f6d51cc9fc71b8164801f2],\n",
    "[81, 0x00000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000000, 0x0000000000000000000000000000000000000000000000000002e52292d1658119019f2ff08ae2c13bb3d29b06b087c4eb0e053889f6d51cc9fc71b8164801f2],\n",
    "[80, 0x000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000000, 0x0000000000000000000000000000000000000000000000000002e52292d1658119019f2ff08ae2c13bb3d29b06b087c4eb0e053889f6d51cc9fc71b8164801f2],\n",
    "[79, 0x000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000000, 0x0000000000000000000000000000000000000000000000000000d24f420d23db27432c412c7b14ed114b90d6c3a185804ced4d330946d51cc9fc71b8164801f2],\n",
    "[78, 0x00000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000000, 0x0000000000000000000000000000000000000000000000000000d24f420d23db27432c412c7b14ed114b90d6c3a185804ced4d330946d51cc9fc71b8164801f2],\n",
    "[77, 0x000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000000, 0x00000000000000000000000000000000000000000000000000004d9a6ddc1371aad38f857b77217806b18065b2ddc4ef25651f31a91ad51cc9fc71b8164801f2],\n",
    "[76, 0x0000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000000, 0x00000000000000000000000000000000000000000000000000000b4003c38b3cec9bc127a2f527bd8164782d2a7be4a691a10830f904d51cc9fc71b8164801f2],\n",
    "[75, 0x0000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000000, 0x00000000000000000000000000000000000000000000000000000b4003c38b3cec9bc127a2f527bd8164782d2a7be4a691a10830f904d51cc9fc71b8164801f2],\n",
    "[74, 0x000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000000, 0x00000000000000000000000000000000000000000000000000000b4003c38b3cec9bc127a2f527bd8164782d2a7be4a691a10830f904d51cc9fc71b8164801f2],\n",
    "[73, 0x0000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000000, 0x000000000000000000000000000000000000000000000000000002f4b6807a3654d4c75be7e4e88630bad726196fa89d7f288550e302151cc9fc71b8164801f2],\n",
    "[72, 0x00000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000000, 0x000000000000000000000000000000000000000000000000000002f4b6807a3654d4c75be7e4e88630bad726196fa89d7f288550e302151cc9fc71b8164801f2],\n",
    "[71, 0x00000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000000, 0x000000000000000000000000000000000000000000000000000000e1e32fb5f4aee308e8f920d8b85c906ee4552c999b3a8a6498dd81651cc9fc71b8164801f2],\n",
    "[70, 0x0000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000000, 0x000000000000000000000000000000000000000000000000000000e1e32fb5f4aee308e8f920d8b85c906ee4552c999b3a8a6498dd81651cc9fc71b8164801f2],\n",
    "[69, 0x00000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000000, 0x0000000000000000000000000000000000000000000000000000005d2e5b84e44566994c3d6fd4c4e785d4d3e41bd5daa962dc6adc21391cc9fc71b8164801f2],\n",
    "[68, 0x000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000000, 0x0000000000000000000000000000000000000000000000000000001ad3f16c5c10a8617ddf9752cb2d0087cbab9373fa60cf1853db71231cc9fc71b8164801f2],\n",
    "[67, 0x000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000000, 0x0000000000000000000000000000000000000000000000000000001ad3f16c5c10a8617ddf9752cb2d0087cbab9373fa60cf1853db71231cc9fc71b8164801f2],\n",
    "[66, 0x00000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000000, 0x0000000000000000000000000000000000000000000000000000000a3d56e63a0378d38a4821324cbe5f34899d715b824eaa274e1b451d9cc9fc71b8164801f2],\n",
    "[65, 0x000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000000, 0x00000000000000000000000000000000000000000000000000000001f209a328fce10c907c66220d870e8ae896604f464597aecb3b2f1adcc9fc71b8164801f2],\n",
    "[64, 0x0000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000000, 0x00000000000000000000000000000000000000000000000000000001f209a328fce10c907c66220d870e8ae896604f464597aecb3b2f1adcc9fc71b8164801f2],\n",
    "[63, 0x0000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000000, 0x00000000000000000000000000000000000000000000000000000001f209a328fce10c907c66220d870e8ae896604f464597aecb3b2f1adcc9fc71b8164801f2],\n",
    "[62, 0x000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000000, 0x00000000000000000000000000000000000000000000000000000000e89ffac6dc0e13b142eec005a02475b4757e2dbec4755fbadf2c5a84c9fc71b8164801f2],\n",
    "[61, 0x0000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000000, 0x0000000000000000000000000000000000000000000000000000000063eb2695cba49741a6330f01acaf6b1a650d1cfb03e43832b12afa58c9fc71b8164801f2],\n",
    "[60, 0x00000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000000, 0x000000000000000000000000000000000000000000000000000000002190bc7d436fd909d7d5367fb2f4e5cd5cd49499239ba46e9a2a4a42c9fc71b8164801f2],\n",
    "[59, 0x00000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000000, 0x0000000000000000000000000000000000000000000000000000000000638770ff5579edf0a64a3eb617a326d8b8506833775a8c8ea9f237c9fc71b8164801f2],\n",
    "[58, 0x0000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000000, 0x0000000000000000000000000000000000000000000000000000000000638770ff5579edf0a64a3eb617a326d8b8506833775a8c8ea9f237c9fc71b8164801f2],\n",
    "[57, 0x00000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000000, 0x0000000000000000000000000000000000000000000000000000000000638770ff5579edf0a64a3eb617a326d8b8506833775a8c8ea9f237c9fc71b8164801f2],\n",
    "[56, 0x000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000000, 0x0000000000000000000000000000000000000000000000000000000000638770ff5579edf0a64a3eb617a326d8b8506833775a8c8ea9f237c9fc71b8164801f2],\n",
    "[55, 0x000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000000, 0x0000000000000000000000000000000000000000000000000000000000638770ff5579edf0a64a3eb617a326d8b8506833775a8c8ea9f237c9fc71b8164801f2],\n",
    "[54, 0x00000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000000, 0x0000000000000000000000000000000000000000000000000000000000638770ff5579edf0a64a3eb617a326d8b8506833775a8c8ea9f237c9fc71b8164801f2],\n",
    "[53, 0x000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000000, 0x0000000000000000000000000000000000000000000000000000000000638770ff5579edf0a64a3eb617a326d8b8506833775a8c8ea9f237c9fc71b8164801f2],\n",
    "[52, 0x0000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000000, 0x0000000000000000000000000000000000000000000000000000000000212d06e6cd452fb8d7ec66341de8a18bb017dfd19711f8ca92f187b3fc71b8164801f2],\n",
    "[51, 0x0000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000000, 0x0000000000000000000000000000000000000000000000000000000000212d06e6cd452fb8d7ec66341de8a18bb017dfd19711f8ca92f187b3fc71b8164801f2],\n",
    "[50, 0x000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000000, 0x000000000000000000000000000000000000000000000000000000000010966c60ab38002ae454f0139f7a00386e09bdb91effd3d98d315bae7c71b8164801f2],\n",
    "[49, 0x0000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000000, 0x0000000000000000000000000000000000000000000000000000000000084b1f1d9a316863ea8935036042af8ecd02acace2f6c1610a5145abbc71b8164801f2],\n",
    "[48, 0x00000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000000, 0x00000000000000000000000000000000000000000000000000000000000425787c11ae1c806da3577b40a70739fc7f2426c4f23824c8e13aaa5c71b8164801f2],\n",
    "[47, 0x00000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000000, 0x00000000000000000000000000000000000000000000000000000000000212a52b4d6c768eaf3068b730d9330f943d5fe3b5eff386a8293529ac71b8164801f2],\n",
    "[46, 0x0000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000000, 0x000000000000000000000000000000000000000000000000000000000001093b82eb4ba395cff6f15528f248fa601c7dc22e6ed13797cd32695471b8164801f2],\n",
    "[45, 0x00000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000000, 0x0000000000000000000000000000000000000000000000000000000000008486aeba3b3a19605a35a424fed3efc60c0cb16aae40100f9f31092871b8164801f2],\n",
    "[44, 0x000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000000, 0x000000000000000000000000000000000000000000000000000000000000422c44a1b3055b288bd7cba305196a7903d42908cdf77c4b8830591271b8164801f2],\n",
    "[43, 0x000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000000, 0x00000000000000000000000000000000000000000000000000000000000020ff0f956eeafc0ca4a8df62083c27d27fb7e4d7ddd332697cb0010771b8164801f2],\n",
    "[42, 0x00000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000000, 0x0000000000000000000000000000000000000000000000000000000000001068750f4cddcc7eb111694189cd867f3da9c2bf65c10d7876efd501f1b8164801f2],\n",
    "[41, 0x000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000000, 0x000000000000000000000000000000000000000000000000000000000000081d27cc3bd734b7b745ae314a9635d59ca2b1b329b7fafff40fbeff31b8164801f2],\n",
    "[40, 0x0000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000000, 0x00000000000000000000000000000000000000000000000000000000000003f7812ab353e8d43a5fd0a92afa8d80cc1f292d0bb371c3b29fb3fdd1b8164801f2],\n",
    "[39, 0x0000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000000, 0x00000000000000000000000000000000000000000000000000000000000001e4add9ef1242e27bece1e51b2cb95663dd64e9fcb12d2591e7ae7d21b8164801f2],\n",
    "[38, 0x000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000000, 0x00000000000000000000000000000000000000000000000000000000000000db44318cf16fe99cb36a831345cf412fbc82c875300ad6818babbcc9b8164801f2],\n",
    "[37, 0x0000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000000, 0x00000000000000000000000000000000000000000000000000000000000000568f5d5be1066d2d16aed20f525a3695ac11b7b16f79aef95daa5c9db8164801f2],\n",
    "[36, 0x00000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000000, 0x000000000000000000000000000000000000000000000000000000000000001434f34358d1aef54850f98d589fb148a3d92f4f8f311b3546a9ac87b8164801f2],\n",
    "[35, 0x00000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000000, 0x000000000000000000000000000000000000000000000000000000000000001434f34358d1aef54850f98d589fb148a3d92f4f8f311b3546a9ac87b8164801f2],\n",
    "[34, 0x0000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000000, 0x00000000000000000000000000000000000000000000000000000000000000039e58bd36c47f6754b9836cda310ff561cb0d37171ef64440e9808238164801f2],\n",
    "[33, 0x00000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000000, 0x00000000000000000000000000000000000000000000000000000000000000039e58bd36c47f6754b9836cda310ff561cb0d37171ef64440e9808238164801f2],\n",
    "[32, 0x000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000000, 0x00000000000000000000000000000000000000000000000000000000000000039e58bd36c47f6754b9836cda310ff561cb0d37171ef64440e9808238164801f2],\n",
    "[31, 0x000000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000000, 0x00000000000000000000000000000000000000000000000000000000000000018b856c7282d975964694a8ca633bcaf98948f4081cb1a620317b0188164801f2],\n",
    "[30, 0x00000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000000, 0x0000000000000000000000000000000000000000000000000000000000000000821bc41062067cb70d1d46c27c51b5c56866d2809b8f570fd5784130164801f2],\n",
    "[29, 0x000000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000000, 0x0000000000000000000000000000000000000000000000000000000000000000821bc41062067cb70d1d46c27c51b5c56866d2809b8f570fd5784130164801f2],\n",
    "[28, 0x0000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000000, 0x00000000000000000000000000000000000000000000000000000000000000003fc159f7d9d1be7f3ebf6e4082973078602e4a1ebb46c34bbe77911a164801f2],\n",
    "[27, 0x0000000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000000, 0x00000000000000000000000000000000000000000000000000000000000000001e9424eb95b75f63579081ff85b9edd1dc1205edcb227969b2f7390f164801f2],\n",
    "[26, 0x000000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000000, 0x00000000000000000000000000000000000000000000000000000000000000000dfd8a6573aa2fd563f90bdf074b4c7e9a03e3d553105478ad370d09964801f2],\n",
    "[25, 0x0000000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000000, 0x000000000000000000000000000000000000000000000000000000000000000005b23d2262a3980e6a2d50cec813fbd4f8fcd2c9170742002a56f706d64801f2],\n",
    "[24, 0x00000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000000, 0x0000000000000000000000000000000000000000000000000000000000000000018c9680da204c2aed477346a878538028794a42f902b8c3e8e6ec05764801f2],\n",
    "[23, 0x00000000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000000, 0x0000000000000000000000000000000000000000000000000000000000000000018c9680da204c2aed477346a878538028794a42f902b8c3e8e6ec05764801f2],\n",
    "[22, 0x0000000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000000, 0x000000000000000000000000000000000000000000000000000000000000000000832cd877ff79320e0dfbe4a091696af458682171819674d88ae9451e4801f2],\n",
    "[21, 0x00000000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000000, 0x000000000000000000000000000000000000000000000000000000000000000000832cd877ff79320e0dfbe4a091696af458682171819674d88ae9451e4801f2],\n",
    "[20, 0x000000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000000, 0x00000000000000000000000000000000000000000000000000000000000000000040d26e5f774473d63f9e0c1e97aee5a7502f990fa14de11473e895084801f2],\n",
    "[19, 0x000000000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000000, 0x0000000000000000000000000000000000000000000000000000000000000000001fa53953332a14ba586f1fdd9ad1a300cc1354deb129973268683cfd4801f2],\n",
    "[18, 0x00000000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800000, 0x0000000000000000000000000000000000000000000000000000000000000000000f0e9ecd111ce52c64d7a9bd1c6301ad8a0532c63917724162a810f7c801f2],\n",
    "[17, 0x000000000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00000, 0x00000000000000000000000000000000000000000000000000000000000000000006c3518a00164d656b0beeacdd2bb103e8fe21b9fd0e5fc8dfc7faf50801f2],\n",
    "[16, 0x0000000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600000, 0x000000000000000000000000000000000000000000000000000000000000000000029daae877930181ee261124bd9008af187a9933df09d68c9e57eff3a801f2],\n",
    "[15, 0x0000000000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00000, 0x000000000000000000000000000000000000000000000000000000000000000000008ad797b3515b902fb32260adc23484b038d4f0d00791ee7d9fea72f801f2],\n",
    "[14, 0x000000000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580000, 0x000000000000000000000000000000000000000000000000000000000000000000008ad797b3515b902fb32260adc23484b038d4f0d00791ee7d9fea72f801f2],\n",
    "[13, 0x0000000000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0000, 0x000000000000000000000000000000000000000000000000000000000000000000000622c38240f213c01666afa9cebf7a162863e00c4700c6f571e912cc01f2],\n",
    "[12, 0x00000000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160000, 0x000000000000000000000000000000000000000000000000000000000000000000000622c38240f213c01666afa9cebf7a162863e00c4700c6f571e912cc01f2],\n",
    "[11, 0x00000000000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b0000, 0x000000000000000000000000000000000000000000000000000000000000000000000622c38240f213c01666afa9cebf7a162863e00c4700c6f571e912cc01f2],\n",
    "[10, 0x0000000000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c058000, 0x000000000000000000000000000000000000000000000000000000000000000000000622c38240f213c01666afa9cebf7a162863e00c4700c6f571e912cc01f2],\n",
    "[9, 0x00000000000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c000, 0x000000000000000000000000000000000000000000000000000000000000000000000622c38240f213c01666afa9cebf7a162863e00c4700c6f571e912cc01f2],\n",
    "[8, 0x000000000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b016000, 0x0000000000000000000000000000000000000000000000000000000000000000000001fd1ce0b86ec7dc9980d221af23d1c157e0578628fc3db9307907caa1f2],\n",
    "[7, 0x000000000000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b000, 0x0000000000000000000000000000000000000000000000000000000000000000000001fd1ce0b86ec7dc9980d221af23d1c157e0578628fc3db9307907caa1f2],\n",
    "[6, 0x00000000000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c05800, 0x0000000000000000000000000000000000000000000000000000000000000000000000f3b338564df4e3ba475abfa73ce7ac23bf7564a17b1b6a201d050a49f2],\n",
    "[5, 0x000000000000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c00, 0x00000000000000000000000000000000000000000000000000000000000000000000006efe64253d8b674aaa9f0ea34972a189af0453ddba8a4297ef03aa1df2],\n",
    "[4, 0x0000000000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b01600, 0x00000000000000000000000000000000000000000000000000000000000000000000002ca3fa0cb556a912dc4136214fb81c3ca6cbcb7bda41aed3d802fa07f2],\n",
    "[3, 0x0000000000000000000000000000000000000000000000000000000000000000000000212d350c441a5f1be72eec40fcdd42a6841c4430f02449e20b80580b00, 0x00000000000000000000000000000000000000000000000000000000000000000000000b76c500713c49f6f51249e052dad99622af874aea1d64f1cc82a1fcf2],\n",
    "[2, 0x000000000000000000000000000000000000000000000000000000000000000000000010969a86220d2f8df39776207e6ea153420e2218781224f105c02c0580, 0x00000000000000000000000000000000000000000000000000000000000000000000000b76c500713c49f6f51249e052dad99622af874aea1d64f1cc82a1fcf2],\n",
    "[1, 0x0000000000000000000000000000000000000000000000000000000000000000000000084b4d43110697c6f9cbbb103f3750a9a107110c3c09127882e01602c0, 0x0000000000000000000000000000000000000000000000000000000000000000000000032b77bd6035b22ffb468ed013a388ec81a8763eae14527949a28bfa32],\n",
    "[0, 0x00000000000000000000000000000000000000000000000000000000000000000000000425a6a188834be37ce5dd881f9ba854d08388861e04893c41700b0160, 0x0000000000000000000000000000000000000000000000000000000000000000000000032b77bd6035b22ffb468ed013a388ec81a8763eae14527949a28bfa32]\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "285 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "284 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "283 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "282 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "281 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "280 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "279 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "278 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "277 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "276 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "275 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "274 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "273 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "272 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "271 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "270 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "269 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "268 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "267 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "266 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "265 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "264 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "263 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "262 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "261 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "260 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "259 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "258 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "257 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "256 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "255 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "254 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "253 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "252 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "251 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "250 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "249 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "248 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "247 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "246 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "245 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "244 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "243 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "242 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "241 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "240 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "239 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "238 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "237 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "236 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "235 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "234 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "233 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "232 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "231 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "230 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "229 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "228 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "227 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "226 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "225 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "224 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "223 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "222 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "221 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "220 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "219 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "218 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "217 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "216 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "215 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "214 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "213 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "212 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "211 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "210 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "209 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "208 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "207 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "206 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "205 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "204 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "203 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "202 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "201 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "200 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "199 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "198 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "197 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "196 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "195 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "194 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "193 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "192 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "191 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "190 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "189 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "188 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "187 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "186 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "185 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "184 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "183 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "182 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "181 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "180 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "179 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "178 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "177 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "176 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "175 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "174 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "173 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "172 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "171 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "170 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "169 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "168 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "167 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "166 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "165 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "164 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "163 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "162 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "161 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "160 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "159 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "158 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "157 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "156 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "155 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "154 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "153 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "152 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "151 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "150 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "149 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "148 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "147 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "146 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "145 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "144 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "143 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "142 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "141 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "140 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "139 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "138 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "137 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "136 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "135 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "134 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "133 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "132 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "131 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "130 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "129 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "128 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "127 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "126 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "125 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "124 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "123 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "122 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "121 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "120 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "119 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "118 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "117 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "116 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "115 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "114 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "113 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "112 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "111 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "110 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "109 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "108 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "107 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "106 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "105 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "104 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "103 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "102 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "101 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "100 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "99 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "98 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "97 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "96 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "95 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "94 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "93 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "92 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "91 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "90 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "89 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "88 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "87 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "86 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "85 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "84 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "83 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "82 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "81 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "80 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "79 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "78 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "77 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "76 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "75 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "74 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "73 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "72 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "71 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "70 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "69 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "68 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "67 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "66 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "65 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "64 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "63 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "62 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "61 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "60 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "59 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "58 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "57 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "56 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "55 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "54 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "53 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "52 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "51 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "50 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "49 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "48 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "47 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "46 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "45 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "44 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "43 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "42 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "41 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "40 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "39 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "38 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "37 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "36 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "35 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "34 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "33 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "32 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "31 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "30 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "29 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "28 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "27 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "26 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "25 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "24 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "23 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "22 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "21 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "20 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "19 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "18 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "17 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "16 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "15 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "14 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "13 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "12 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "11 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "10 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "9 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "8 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "7 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "6 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "5 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "4 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "3 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "2 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "1 0 85457526618988939021622893830440772086794810363406184870420562049586\n",
      "0 0 85457526618988939021622893830440772086794810363406184870420562049586\n"
     ]
    }
   ],
   "source": [
    "for [i, t, r] in D:\n",
    "    print(i, t % m, r % m)\n",
    "    assert t % m == 0\n",
    "    assert r % m == (a * b) % m"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 208,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "u256h!(\"0548c135e26faa9c977fb2eda057b54b2e0baa9a77a0be7c80278f4f03462d4c\")\n",
      "u256h!(\"024385f6bebc1c496e09955db534ef4b1eaff9a78e27d4093cfa8f7c8f886f6b\")\n",
      "u256h!(\"078c472ca12bc6e60589484b558ca4964cbba44205c89285bd221ecb92ce9cb7\")\n"
     ]
    }
   ],
   "source": [
    "a = rand() % prime\n",
    "b = rand() % prime\n",
    "print(U2562(a))\n",
    "print(U2562(b))\n",
    "print(U2562((a + b) % prime ))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cpoint(x, y):\n",
    "    return 'CurvePoint{\\n    x: FieldElement(' + U2562(x) + '),\\n    y: FieldElement(' + U2562(y) + '),\\n}'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'CurvePoint{\\n    x: FieldElement(u256!(\"0487868a9c0b15bb6364b9150f381299f44101622499c849b7eb3137d7271553\")),\\n    y: FieldElement(u256!(\"02fa68e3d326247a125d5c1cc549a496b5d23720247b076aee5c3e0c95ea3606\")),\\n}'"
      ]
     },
     "execution_count": 202,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cpoint(a, b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0xc69177e3, 0x5b5050fd, 0x43d43938, 0xe3c4b9e0, 0xc6da775b, 0x2a79c929, 0x4fbb1e6f, 0x014023b4'"
      ]
     },
     "execution_count": 199,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "constant(0x14023b44fbb1e6f2a79c929c6da775be3c4b9e043d439385b5050fdc69177e3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 247,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = 0x0548c135e26faa9c977fb2eda057b54b2e0baa9a77a0be7c80278f4f03462d4c\n",
    "y = 0x024385f6bebc1c496e09955db534ef4b1eaff9a78e27d4093cfa8f7c8f886f6b\n",
    "r = x * y * modinv(2**256, prime) % prime"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 248,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0x12b854fc6321976d374ad069cfdec8bb7b2bd184259dae8f530cbb28f0805b4'"
      ]
     },
     "execution_count": 248,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hex(r)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 279,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mul_red(x, y):\n",
    "    A = 0\n",
    "    for i in range(4):\n",
    "        a0 = A % 2**64\n",
    "        xi = (x >> (64 * i)) % 2**64 \n",
    "        y0 = y % 2**64\n",
    "        u = ((a0 + xi * y0) * (-1)) % 2**64\n",
    "        print('u = ', hex(u))\n",
    "        A += xi * y\n",
    "        print('A = ', hex(A))\n",
    "        A += u * prime\n",
    "        print('A = ', hex(A))\n",
    "        A >>= 64\n",
    "        print('A = ', hex(A))\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 280,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "u =  0x2e028228afa71d3c\n",
      "A =  0x1221c8932a7b1ec065acdd13475045ccba373e8fe0ae7f04f3d11ef358d1fc3d1fd7dd75058e2c4\n",
      "A =  0x292309a7824ead8f4857284de8df558cba373e8fe0ae7f04f3d11ef358d1fc40000000000000000\n",
      "A =  0x292309a7824ead8f4857284de8df558cba373e8fe0ae7f04f3d11ef358d1fc4\n",
      "u =  0xa6abc5c5a1cb7e68\n",
      "A =  0x683c7b4c833f6ab67416e518d6b97b384ffab48f66508cec166da1d7fac41959543a3a5e348198\n",
      "A =  0x59d9aa979919b6907dc3904d75a1e63384ffab48f66508cec166da1d7fac41a0000000000000000\n",
      "A =  0x59d9aa979919b6907dc3904d75a1e63384ffab48f66508cec166da1d7fac41a\n",
      "u =  0x5027de54e6e8f08d\n",
      "A =  0x156f5190cfd2455e3542ec2c481c07cf521b094143b64b822068e3f866c6ab8afd821ab19170f73\n",
      "A =  0x3d8340bb4346bdf9df9f26619f9b9d9f521b094143b64b822068e3f866c6ab90000000000000000\n",
      "A =  0x3d8340bb4346bdf9df9f26619f9b9d9f521b094143b64b822068e3f866c6ab9\n",
      "u =  0x23f1dfdca30da213\n",
      "A =  0xbf650e119ac63d864cf5fc9162948b7b2bd184259dae8f530cbb28f0805b3dc0e20235cf25ded\n",
      "A =  0x12b854fc6321976d374ad069cfdec8bb7b2bd184259dae8f530cbb28f0805b40000000000000000\n",
      "A =  0x12b854fc6321976d374ad069cfdec8bb7b2bd184259dae8f530cbb28f0805b4\n"
     ]
    }
   ],
   "source": [
    "mul_red(x, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 256,
   "metadata": {},
   "outputs": [],
   "source": [
    "ui = (0x0000000000000000 + 0x80278f4f03462d4c * 0x3cfa8f7c8f886f6b) * 0xffffffffffffffff"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 257,
   "metadata": {},
   "outputs": [],
   "source": [
    "ui %= 2**64"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 259,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0x2e028228afa71d3c'"
      ]
     },
     "execution_count": 259,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hex(ui)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 283,
   "metadata": {},
   "outputs": [],
   "source": [
    "A = 0x292309a7824ead8f4857284de8df558cba373e8fe0ae7f04f3d11ef358d1fc40000000000000000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 288,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "25428177385395219574742085458513000243736712653558948791323346594581609388148807610104094769272"
      ]
     },
     "execution_count": 288,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "A = 0x59d9aa979919b6907dc3904d75a1e63384ffab48f66508cec166da1d7fac41a0000000000000000\n",
    "B = 0x02916bc86cea6d5ecdf89ac9f418566b384ffab48f66508cec166da1d7fac4199e7a23de6b1a3f88\n",
    "A - B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 292,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0xa6abc5c5a1cb7e68'"
      ]
     },
     "execution_count": 292,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "u = (0x4f3d11ef358d1fc4 + 0x2e0baa9a77a0be7c * 0x3cfa8f7c8f886f6b) * 0xffffffffffffffff\n",
    "hex(u % 2**64)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 293,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47'"
      ]
     },
     "execution_count": 293,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hex(21888242871839275222246405745257275088696311157297823662689037894645226208583)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 294,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3618502788666131213697322783095070105623107215331596699973092056135872020481"
      ]
     },
     "execution_count": 294,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "0x0800000000000011000000000000000000000000000000000000000000000001"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
